package wwj.service;

import wwj.bean.CartItem;
import wwj.bean.CommodityBean;
import wwj.bean.ShopCartData;
import wwj.dao.CommodityDao;

import java.math.BigDecimal;
import java.util.HashMap;

public class ShopCartService {
    // 选择是否更新购物车还是更新数量
    public static final int AddToShopCartType = 1;
    public static final int  UpdateShopCartByAddBtn= 2;
    public static final int updateShopCartByCheckInput = 3;
    // 全选
    public static final int updateShopCartByAllCheckInput = 4;
    // 移除
    public static final int removeByRemoveBtn = 5;
    // 减少数量
    public static final int UpdateShopCartByReduceBtn = 6;
    public static void dispath(int service,ShopCartData myCart,String id){
        switch (service){
            case AddToShopCartType:{
                addToShopCart(myCart, id);
                break;
            }
            case UpdateShopCartByAddBtn:{
                updateShopCartByAddBtn(myCart,id);

                break;
            }
            case updateShopCartByCheckInput:{
                updateShopCartByCheckInput(myCart,id);
                break;
            }
            case updateShopCartByAllCheckInput:{
                updateShopCartByAllCheckInput(myCart);
                break;
            }
            case removeByRemoveBtn:{
                removeByShopCart(myCart,id);
                break;
            }
            case UpdateShopCartByReduceBtn:{
                reduceToShopCart(myCart,id);
                break;
            }
        }
    }
    // 减数量
    public static void reduceToShopCart(ShopCartData myCart,String id){
        if (myCart.getItemList().containsKey(id)) {
            CartItem item = myCart.getItemList().get(id);
            // 当按了减号，由1变0
            if (item.getNum() == 1) {
                // 数量无法再减
                item.setItemZero(true);
                item.setNum(0);
            }else {
                item.setNum(item.getNum() - 1);
            }
            if (item.getChecked())
                // 计算总计
                myCart.setTotal(myCart.getTotal().subtract(item.getCommodity().getPrice()));
        }
    }


    //移除
    public static void removeByShopCart(ShopCartData myCart,String id){
        HashMap<String, CartItem> shopCart = myCart.getItemList();
        if (shopCart.containsKey(id)){
            shopCart.remove(id);
        }
    }


    public static void addToShopCart(ShopCartData myCart,String id){
        // 判断是否含有同样的商品
        CartItem item = null;
        if (myCart.getItemList().containsKey(id)){
             item = myCart.getItemList().get(id);
            item.setNum(item.getNum()+1);
//            myCart.setTotal(myCart.getTotal().add(item.getCommodity().getPrice()));
        }else{
            CommodityBean commodity = CommodityDao.getCommodityById(Integer.parseInt(id));
             item = new CartItem(commodity);
            myCart.getItemList().put(id,item);
//            myCart.setTotal(myCart.getTotal().add(item.getCommodity().getPrice()));

        }
        if (item.getChecked())
            myCart.setTotal(myCart.getTotal().add(item.getCommodity().getPrice()));
        // 计算总计
    }

    public static void updateShopCartByAddBtn(ShopCartData myCart,String id){
        CartItem item = myCart.getItemList().get(id);
        item.setNum(item.getNum()+1);  // 更新数量会自动计算小计
        item.setItemZero(false);
        if (item.getChecked())
            myCart.setTotal(myCart.getTotal().add(item.getCommodity().getPrice()));
        System.out.println("修改购物车数量："+item.getNum());
        // 计算总计
    }

    public static void updateShopCartByCheckInput(ShopCartData myCart,String id){
        CartItem item= myCart.getItemList().get(id);
        item.setChecked(!item.getChecked());
        if (item.getChecked()){
            myCart.setTotal(myCart.getTotal().add(item.getSubTotal()));
            // 如果点击商品多选框如果是全选自动√上全选按钮
            int temp=0;
            for (CartItem cartItem:myCart.getItemList().values()){
                if (!cartItem.getChecked()){
                    myCart.setAllChecked(false);
                    break;
                }
                temp++;
            }
            if (temp==myCart.getItemList().size()){
                myCart.setAllChecked(true);
            }
        }else{
            myCart.setTotal(myCart.getTotal().subtract(item.getSubTotal()));
            // 商品的取消勾选，全选肯定为false
            myCart.setAllChecked(false);
        }
    }

    // 全选
    public static void updateShopCartByAllCheckInput(ShopCartData myCart){
        // 初始化
        myCart.setAllChecked(!myCart.getAllChecked());
        myCart.setTotal(new BigDecimal(0));

        for (CartItem item:myCart.getItemList().values()){
            item.setChecked(myCart.getAllChecked());
            if (item.getChecked()){
                myCart.setTotal(myCart.getTotal().add(item.getSubTotal())); //总计+小计
            }
        }
    }
}
